<?php
require "include/dbms.inc.php";
require "include/template.inc.php";
require "include/setcontents.inc.php";

function send_pwd($to, $from, $id){
        $pwd=substr($id, 0,5);
	//invio la mail di conferma
	$msg ="Email: {$_POST['email']}\n Nuova Password: {$pwd}\n"."Per confermare la richiesta clicca sul seguente link: http://localhost/hairstyle/rec_pwd.php?id={$id}";
	return(mail($to, "Recupero password", $msg, "From: ".$from));
}
if (!isset($_GET['id'])){
    switch ($_POST['op']){

        case 'invia':
            $oid=mysql_query("SELECT * FROM utente WHERE utente.email='{$_POST['rec_pwd']}'");
            if (!$oid) {//inizio controllo query
                $message="Errore nel database, ci scusiamo per il disagio";
                $body = new Template("dtml/rec_pwd.html");
                $style="alert";
                break;
            }//fine controllo query
            if (mysql_num_rows($oid)!=0){//se l'utente è registrato

                $oid=mysql_query("SELECT * FROM reg_conf WHERE reg_conf.email_utente='{$_POST['rec_pwd']}'");//verifico l'esistenza di altre richieste di recupero password e in caso le elimino
                if (!$oid) {//inizio controllo query
                    $message="Errore nel database, ci scusiamo per il disagio";
                    $body = new Template("dtml/rec_pwd.html");
                    $style="alert";
                    break;
                }//fine controllo query
                if (mysql_num_rows($oid)>=1){//richiesta già presente
                    $oid=mysql_query("DELETE FROM reg_conf WHERE reg_conf.email_utente='{$_POST['rec_pwd']}'");//elimino le richieste precedenti
                    if (!$oid) {//inizio controllo query
                        $message="Errore nel database, ci scusiamo per il disagio";
                        $body = new Template("dtml/rec_pwd.html");
                        $style="alert";
                        break;
                    }//fine controllo query
                    
                }
            
                list($usec, $sec) = explode(' ', microtime()); //inserisco nelle variabili $usec e $sec rispettivamente microsecondi e secondi
                mt_srand((float) $sec + ((float) $usec * 100000));//genero il seed sul quale generare il numero randomico (stessa libreria c)
                $confirm_id=MD5(uniqid(mt_rand(), true)); //genero id e codifico in md5. il parametro true dovrebbe permettere alla funzione di generare un numero tramite un fattore entropico (disordine) più elevato
                $time=time();
                $oid2= mysql_query("INSERT INTO reg_conf VALUES ('{$_POST['rec_pwd']}','{$confirm_id}','{$time}')");
                if (!$oid2) {//inizio controllo query
                    $message="Errore nel database, ci scusiamo per il disagio";
                    $body = new Template("dtml/rec_pwd.html");
                    $style="alert";
                    break;
                }//fine controllo query
                $oid=send_pwd($_POST['rec_pwd'],"D&D",$confirm_id);
                if (!$oid){//controllo esito invio email
                    $message="Si e' riscontrato un problema nell'invio dell'email, ci scusiamo per il disagio";
                    $body = new Template("dtml/rec_pwd.html");
                    $style="alert";
                    mysql_query("DELETE FROM reg_conf WHERE reg_conf.confirm='{$confirm_id}'");
                } else {
                    $message="Controllare l'email inserita nel momento della registrazione per recuperare la password";
                    $style="message";
                    $body=null;
                }               
            }else{//se l'utente non è registrato
                $message="L'email inserita non corrisponde a nessun utente registrato";
                $body = new Template("dtml/rec_pwd.html");
                $style="alert";
            }
            break;

        default:
            $notification = "Recupero password";
            $style="message";
            $body = new Template("dtml/rec_pwd.html");

    }
} else {//è stato chiamato lo script con un parametro passato in get
    $oid=mysql_query("SELECT utente.email, reg_conf.data, reg_conf.confirm  FROM
                      utente
                      LEFT JOIN
                      reg_conf
                      ON utente.email = reg_conf.email_utente
                      WHERE reg_conf.confirm='{$_GET['id']}'");

    if (!$oid) {//inizio controllo query
                    $message="Errore nel database, ci scusiamo per il disagio";
                    $body = new Template("dtml/rec_pwd.html");
                    $style="alert";
                    break;
    }//fine controllo query

    $result=mysql_fetch_assoc($oid);

    if (mysql_num_rows($oid)!=0 AND (time()-$result['data'])<86400){//secondi in 24h        
        $pwd=substr($result['confirm'], 0,5);
        $email = addslashes($result['email']);
        $oid1=mysql_query("UPDATE utente SET password=MD5('{$pwd}') WHERE utente.email='{$result['email']}'");//aggiorno password
        $oid2=mysql_query("DELETE FROM reg_conf WHERE reg_conf.confirm='{$_GET['id']}'");//elimino la richiesta dall'apposita tabella
        if (!($oid1 && $oid2)) {
            $message="Si e' riscontrato un problema nell'inserimento, contattare l'amministratore o ripetere l'operazione";
            $body = new Template("dtml/rec_pwd.html");
            $style="alert";
        }else{
            $message="Password ripristinata. Accedi al tuo account con la nuova password per modificarla.";
            $style="message";
            $body=null;
        }
    }else{//conferma effettuata fuori tempo o tentativo di conferma invalido
            $message="Richiesta effettuata fuori tempo o tentativo non valido.";
            $style="alert";
            $body=null;    }
}
setcontents::setTemplate();
setcontents::setMenu($message,$style);
setcontents::setBody($body);
$main->close();

?>
